import java.awt.Color;
import java.awt.Image;
import java.util.ArrayList;
import java.util.concurrent.Semaphore;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Midia extends Thread {

	private JPanel imagem;
	private float tempoDuracao = 3;
	private float tempoEntrada;
	private String nomeMedia;
	private String imagePath;
	private boolean pause = false;
	private Semaphore semaforo = new Semaphore(0);
	private boolean parou = false;
	private Color c;
	private Object e;
	private ArrayList<Midia> midiasFilhas = new ArrayList<Midia>();
	private ArrayList<String> botoesAtivacao = new ArrayList<String>();

	private Image img;

	public void setBotoesAtivacao(String... strings) {
		for (int i = 0; i < strings.length; i++) {
			botoesAtivacao.add(strings[i]);
		}
	}

	public boolean esseBotaoAtivaAMidia(String a) {
		for (int i = 0; i < botoesAtivacao.size(); i++) {
			if (botoesAtivacao.get(i).equals(a))
				return true;
		}
		return false;
	}

	public Midia(int larg, int alt, int x, int y) {
		this.c = c;
		imagem = new JPanel();
		imagem.setSize(larg, alt);
		imagem.setLocation(x, y);

	}

	public float getTempoEntrada() {
		return tempoEntrada;
	}

	public void setTempoEntrada(float tempoEntrada) {
		this.tempoEntrada = tempoEntrada;
	}

	public void adicionarFilh(Midia m) {
		midiasFilhas.add(m);
	}

	public void acao() {
		imagem.setVisible(true);
	if(this.getName().equals("Figura")){
		imagem.setBackground(Color.green);
		imagem.repaint();
		
//			System.out.println(e);
//			imagem.getGraphics().drawImage((Image) e, 0, 0, imagem);
//			imagem.repaint();
//			imagem.update(imagem.getGraphics());
//			System.out.println(imagem.isVisible()+ " ta visivel");
//			imagem.getGraphics().drawImage(Toolkit.getDefaultToolkit().getImage(this.imagePath), 0, 0, imagem);
//			
	}
		if (this.e != null) {
		
			if (e instanceof Color) {
				imagem.setBackground((Color) e);
//				if (imagem.getGraphics() != null) {
//					imagem.getGraphics().setColor((Color) e);
//					imagem.getGraphics().fillRect(0, 0, 1000, 1000);
//				}

			}
			// imagem.setBackground(c);
			if (e instanceof String && imagem.getComponentCount() < 2)
				imagem.add(new JLabel((String) e));
			if (e instanceof Image){
				imagem.getGraphics().drawImage((Image) e, 0, 0, imagem);
				System.out.println(imagem.getGraphics());
				imagem.add(new JLabel(new ImageIcon((Image) e)));
			}
				

		}
		
	}

	public void setPathImage(String path)
	{
		if( e instanceof Image)
		{
			this.imagePath=path;
		}
		
	}
	public <E> void acao(E e) {

		imagem.setVisible(true);
		this.e = e;
	
		if (e instanceof Color) {
		imagem.setBackground((Color) e);
//			if (imagem.getGraphics() != null) {
//				imagem.getGraphics().setColor((Color) e);
//				imagem.getGraphics().fillRect(0, 0, 1000, 1000);
//			}
		}
		// imagem.setBackground(c);
		if (e instanceof String && imagem.getComponentCount() < 2)
			imagem.add(new JLabel((String) e));
		if (e instanceof Image) {
			
			if(imagem.getComponents().length <1){
				
			imagem.add(new JLabel(new ImageIcon((Image) e)));
			}
			
		//	imagem.setSize(((Image) e).getWidth(imagem), ((Image) e)
			///		.getHeight(imagem));
		//	if (imagem.getGraphics() != null)
		//		imagem.getGraphics().drawImage((Image) e, 0, 0, imagem);
		//	else
		//		img = (Image) e;

		}
		//imagem.repaint();
		
	}

	public boolean temFilhos() {
		if (midiasFilhas.size() > 0)
			return true;
		return false;
	}

	public JPanel getMidia() {
		imagem.setVisible(false);
		return imagem;
	}

	public void setMidia(JPanel midia) {
		this.imagem = midia;
	}

	public float getTempo() {
		return tempoDuracao;
	}

	public ArrayList<Midia> getFilhos() {
		return midiasFilhas;
	}

	public void setTempo(float tempo) {
		this.tempoDuracao = tempo;
	}

	public void pararMidia() {
		parou = true;
		imagem.setVisible(false);
		imagem.getGraphics().dispose();
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub

		int a = 0;
		
		System.out.println("midia");
		while (parou == false) {
			// System.out.println("rodando");
			acao(this.e);
			/*
			 * try { Thread.sleep(100); } catch (InterruptedException e) { //
			 * TODO Auto-generated catch block e.printStackTrace(); }
			 */
			if (pause == true) {
				try {
					semaforo.acquire();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			// this.ativacaoSemaforo();
		}
	}

	public void ativacaoSemaforo(boolean b) {
		pause = b;
	}

	public void liberar() {
		semaforo.release();
		pause = false;
	}

	public void setNome(String string) {
		// TODO Auto-generated method stub
		nomeMedia = string;
	}

	public String getNome() {
		return nomeMedia;
	}

}
